查看原文
其他

降维后进行可视化

豆豆花花 生信星球 2022-06-07


 今天是生信星球陪你的第460天

   大神一句话,菜鸟跑半年。我不是大神,但我可以缩短你走弯路的半年~

   就像歌儿唱的那样,如果你不知道该往哪儿走,就留在这学点生信好不好~

   这里有豆豆和花花的学习历程,从新手到进阶,生信路上有你有我!

豆豆发送于19.9.27
来自Bioconductor放出的单细胞数据分析教程
https://bioconductor.org/packages/release/workflows/vignettes/simpleSingleCell/inst/doc/reads.html

1 利用PCA

对前三个主成分进行两两比较,看看细胞之间的联系

具有相似表达谱的细胞距离会更近(可以理解成每个细胞中都是一万多基因表达,这些基因有的表达高有的表达少,这种高低交错的形态就是表达谱。如果两个细胞都有相似的这种高低交错形态,那么它们可能就具有相似的基因表达特性,于是更有可能是同一类细胞。PCA就是衡量每个细胞中这一万多个基因的表达特性,来对这些细胞进行”种群划分“

首先根据细胞生物学分类(control和treat)画PCA
plotReducedDim(sce, use_dimred="PCA", ncomponents=3
    colour_by="Oncogene") + fontsize
图1

图中可以看到,PC1+PC2的效果是最好的(左侧中部图)

然后根据plate信息画PCA

目的是看看之前的去除批次做的效果如何,如果结果还是和上图一样能分开,那么就表示plate差异依然很大,足够撼动真实的生物学差异

plotReducedDim(sce, use_dimred="PCA", ncomponents=3
    colour_by="Plate") + fontsize
图2

还是看最具代表性的PC1+PC2:不同plate的细胞分不开,说明之前removeBatchEffect()是成功的

注意:

plotReducedDim()会使用之前利用denoisePCA()得到的结果,而且可以一次画多个主成分两两比较,视觉效果更直观。

作者建议

  • 每个作图函数,都能根据细胞类型去调整点的颜色和大小,一般会设置:size_by=shape_by=

  • 虽然还有许多主成分,但它们包含的信息量远不如前几个主成分

2 利用tSNE

另一个常用的降维算法就是t-stochastic neighbour embedding (t-SNE),是基于在邻域图上随机游走的概率分布。它比PCA的强大之处在于,如果细胞群体很多,tSNE依然可以很好地将细胞按一定规则区分。这是因为tSNE能在高维空间中直接捕获细胞非线性关系,而PCA必须在线性的坐标轴上去展示它们。不过tSNE的计算量会更大,而且参数设置更复杂,一方面针对tSNE每次映射的坐标都不同,要设置随机种子,方便别人重复;另一方面需要设置perplexity参数,它会影响最后显示的细胞分类情况,perplexity的含义是:the number of close neighbors each point has

下面会利用PCA降维结果继续使用多个perplexity值进行tSNE可视化

set.seed(100)
out5 <- plotTSNE(sce, run_args=list(use_dimred="PCA", perplexity=5),
    colour_by="Oncogene") + fontsize + ggtitle("Perplexity = 5")

set.seed(100)
out10 <- plotTSNE(sce, run_args=list(use_dimred="PCA", perplexity=10),
    colour_by="Oncogene") + fontsize + ggtitle("Perplexity = 10")

set.seed(100)
out20 <- plotTSNE(sce, run_args=list(use_dimred="PCA", perplexity=20),
    colour_by="Oncogene") + fontsize + ggtitle("Perplexity = 20")

multiplot(out5, out10, out20, cols=3)
图3

因为tSNE是一个随机的算法,所以我们要多试验几遍,确保结果具有代表性(相当于多做几次实验重复,增加可靠性);最终的脚本要使用set.seed()保证可重复性;不同的perplexity 会影响细胞在低维空间的分布

从上面图中,如果认为perplexity=20效果还不错,因此下面继续跑runTSNE时就可以设置perplexity=20

set.seed(100)
sce <- runTSNE(sce, use_dimred="PCA", perplexity=20)
reducedDimNames(sce)
## [1] "PCA"  "TSNE"

除此以外,还有许多降维的方法:例如multidimensional scaling、 diffusion maps,当然不同算法各有自己的适用范围,比如 diffusion maps(plotDiffusionMap) 会将细胞放在一个连续的轨迹上,这在推断分化过程方面是很有效的

作者建议

  • 如何解释tSNE图?可以参考https://distill.pub/2016/misread-tsne/ 其中映射到二维坐标上的cluster之间的距离其实没什么意义,还有cluster的大小(也就是其中点的分布稀疏程度,而不是指其中包含点的多少。对于同等数量的点,分布分散一点形成的cluster就大)也是没什么具体意义。它只是一种二维空间再现高维空间的手段

  • perplexity的值一般设为5-50,可以看一下上面链接中给出的测试图:当这个值不在5-50范围时,点聚成的形状就很奇怪

    图4
  • 另外画tsne图时一般要重复很多次,因为重复次数越多,画出的图形状越稳定,上图中使用了5000次重复,下图如果仅仅使用120次重复,结果会是:

    图5
  • tsne图中的点距离并没有意义,用两张图就能说明:
    第一张:本来绿色的点和其他两种是有距离的,但是当设置的perplexity增大发现,图中它们距离是差不多相等的。Wait!那如果设成50不就可以了吗?

    图6

    从这个图中看好像是的,但是…

    如果增加原本点的个数,依然是绿色与其他两种有原始距离,使用perplexity=50,结果依然得不出相似的结论,说明perplexity不是一个固定的值,它会根据分析点的数量而变化,得到的结果也不能反应原始数据结构

    图7
  • tSNE能做的,只是将原本聚在一起的,现在依旧聚在一起,并且有时会给你一些数据形状

    图8
  • tSNE使用很流行的一个原因就是:它很灵活,经常能帮助寻找到数据的结构(像线性方法PCA就不可以),不过想要找点的距离远近就不要看tSNE了


点击底部的“阅读原文”,获得更好的阅读体验哦😻

初学生信,很荣幸带你迈出第一步。

我们是生信星球,一个不拽术语、通俗易懂的生信知识平台。由于是2018年新号,竟然没有留言功能。需要帮助或提出意见请后台留言、联系微信或发送邮件到jieandze1314@gmail.com,每一条都会看到的哦~

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存